\section{Herramientas utilizadas}
Para realizar el diseño estructural y funcional de la aplicación se analizaron
herramientas como: \emph{Kivio}, \emph{UML Studio} o \emph{Visual Paradigm for
UML}. Al final, se decidió que \emph{Visual Paradigm for UML} sería la
herramienta más idónea para realizar esta fase.

\subsection{\emph{Visual Paradigm for UML}}
Es una herramienta \emph{CASE} multiplataforma que soporta \emph{UML 2},
\emph{SysML} y la notación y modelado de procesos de negocio (\emph{BPMN}).

\subsubsection{Características}
\emph{Visual Paradigm} posee las siguientes características:
\begin{itemize}
\item Diagramas de diseño automático sofisticado. 
\item Entorno de modelado visual. 
\item 13 tipos de diagramas UML (incluidos de clases y secuencia). 
\item Posibilidad de generar documentación y reportes \emph{UML}.
\item Generación automática de código en multitud de lenguajes de programación.
\item Ingeniería inversa.
\item Licencia propietaria (con una edición libre: la \emph{Free Community
Edition}).
\end{itemize}

\subsubsection{Motivos de la elección}
Se eligió esta herramienta por los siguientes motivos:
\begin{itemize}
\item Años de experiencia, utilizada en otras asignaturas. 
\item Gran poder descriptivo, mejor diseño y mejor implementación que otras 
herramientas analizadas. 
\item Permite la generación automática de código en \emph{C\#} a partir de los
diagramas diseñados.
\item Permite realizar ingeniería inversa. 
\item La ESI nos facilita una licencia para poder utilizar la edición
\emph{VP-UML Standard Edition}.
\end{itemize}

\section{Diagramas elaborados}
Con esta herramienta se elaboró el diagrama de clases de la aplicación y los
principales diagramas de secuencia.

\subsection{Diagramas de clases}
La figura \ref{img:Classes}, muestra un esquema general de los paquetes y
las clases que componen la implementación de la aplicación.

\begin{sidewaysfigure}
\imagen{Classes.pdf}{20}{Diagrama de clases}{img:Classes}
\end{sidewaysfigure}

La figura \ref{img:Presentation}, muestra en detalle las clases que componen el
paquete \emph{presentation}. Estas clases implementan las interfaces gráficas
de la aplicación.

\imagen{Presentation.pdf}{13}{Clases del paquete \emph{Presentation}}
{img:Presentation}

La figura \ref{img:Domain}, muestra en detalle las clases que componen el
paquete \emph{presentation}. Estas clases implementan la parte lógica de la
aplicación.

\imagen{Domain.pdf}{12}{Clases del paquete \emph{Domain}}{img:Domain}

La figura \ref{img:Communications}, muestra en detalle las clases que componen
el paquete \emph{presentation}. Estas clases implementan la parte de
comunicaciones entre la aplicación, la base de datos distribuida y otros
jugadores de la red.

\imagen{Communications.pdf}{10}{Clases del paquete \emph{Communications}}
{img:Communications}

\subsection{Diagramas de secuencia}
La figura \ref{img:AddUser} muestra el diagrama de secuencia del caso de uso
\emph{añadir un usuario a la base de datos}. El usuario especifica su nombre,
contraseña y avatar y se la envía a la base de datos distribuida.

\begin{sidewaysfigure}
\imagen{AddUser.pdf}{20}{Diagrama de secuencia de \emph{añadir un usuario a
la base de datos}}{img:AddUser}
\end{sidewaysfigure}

La figura \ref{img:LocalMode} muestra el diagrama de secuencia del caso de uso
\emph{iniciar una partida local contra la CPU}. El usuario selecciona
un nombre y un avatar para el jugador humano y un nombre y el avatar de la CPU
para el jugador virtual.

\imagen{LocalMode.pdf}{13}{Diagrama de secuencia de \emph{iniciar una partida
local contra la CPU}}{img:LocalMode}

La figura \ref{img:LocalPlay} muestra el diagrama de secuencia del caso de uso
\emph{realizar jugada en una partida local contra la CPU}. El jugador humano 
realiza el movimiento de una ficha y la CPU le responde con otra jugada.

\begin{sidewaysfigure}
\imagen{LocalPlay.pdf}{20}{Diagrama de secuencia de \emph{realizar jugada en
una partida local contra la CPU}}{img:LocalPlay}
\end{sidewaysfigure}

La figura \ref{img:Login} muestra el diagrama de secuencia del caso de uso
\emph{autentificarse para jugar en red}. El usuario introduce su nombre y
contraseña, se accede a la base de datos para comprobar que existe dicho
usuario y se comprueba si las contraseñas coinciden.

\begin{sidewaysfigure}
\imagen{Login.pdf}{20}{Diagrama de secuencia de \emph{autentificarse para
jugar en red}}{img:Login}
\end{sidewaysfigure}

La figura \ref{img:NetMode} muestra el diagrama de secuencia del caso de uso
\emph{iniciar una partida en red}. El usuario crea una partida y espera a que
otro jugador se una a ella. Cuando esto sucede, el usuario puede pulsar el
botón ``Empezar'' para comenzar la partida en red.

\begin{sidewaysfigure}
\imagen{NetMode.pdf}{20}{Diagrama de secuencia de \emph{iniciar una partida
en red}}{img:NetMode}
\end{sidewaysfigure}

La figura \ref{img:NetPlay} muestra el diagrama de secuencia del caso de uso
\emph{realizar jugada en una partida en red}. El usuario realiza el movimiento
de una ficha y se lo envía mediante la conexión TCP al oponente. Ambos
actualizan sus tableros.

\begin{sidewaysfigure}
\imagen{NetPlay.pdf}{20}{Diagrama de secuencia de \emph{realizar jugada en
una partida en red}}{img:NetPlay}
\end{sidewaysfigure}

%\section{Cambios realizados}

